suppressPackageStartupMessages({
  library(Seurat)
  library(org.Dr.eg.db)
  library(BSgenome.Drerio.UCSC.danRer11)
  library(Signac)
  library(knitr)
  library(kableExtra)
  library(dplyr)
  library(ggplot2)
  library(ggsci)
  library(limma)
  library(JASPAR2020)
  library(patchwork)
  library(TFBSTools)
  library(motifmatchr)
  library(AnnotationHub)
  library(harmony)
})
options(future.globals.maxSize = 4000 * 1024^2)

Read data

int.3WT <- readRDS(file = "RDSfiles/int.neural.3WT.RDS")
p1 <- DimPlot(int.3WT, reduction = "wnn.umap", group.by = "wsnn_res.0.8", label = T, repel = T) + scale_color_igv() + NoLegend()
p2 <- DimPlot(int.3WT, reduction = "wnn.umap", group.by = "Clusters", label = T, repel = T) + scale_color_igv() + NoLegend()
p1 + p2

Increase cluster resolution

# remove old individual cluster resolutions
int.3WT$wsnn_res.1 <- NULL
int.3WT$wsnn_res.1.5 <- NULL
int.3WT$wsnn_res.2 <- NULL
int.3WT$wsnn_res.2.5 <- NULL
int.3WT$wsnn_res.3 <- NULL
int.3WT$wsnn_res.3.5 <- NULL
int.3WT$wsnn_res.6 <- NULL
int.3WT$wsnn_res.8 <- NULL
int.3WT <- FindClusters(int.3WT, graph.name = "wsnn", resolution = 2, algorithm = 3, verbose = FALSE)
int.3WT <- FindClusters(int.3WT, graph.name = "wsnn", resolution = 3, algorithm = 3, verbose = FALSE)
int.3WT <- FindClusters(int.3WT, graph.name = "wsnn", resolution = 4, algorithm = 3, verbose = FALSE)
int.3WT <- FindClusters(int.3WT, graph.name = "wsnn", resolution = 5, algorithm = 3, verbose = FALSE)
int.3WT <- FindClusters(int.3WT, graph.name = "wsnn", resolution = 6, algorithm = 3, verbose = FALSE)
p1 <- DimPlot(int.3WT, reduction = "wnn.umap", group.by = "wsnn_res.2", label = T, repel = T) + scale_color_igv() + NoLegend()
p2 <- DimPlot(int.3WT, reduction = "wnn.umap", group.by = "wsnn_res.3", label = T, repel = T) + scale_color_igv() + NoLegend()
p3 <- DimPlot(int.3WT, reduction = "wnn.umap", group.by = "wsnn_res.4", label = T, repel = T) + scale_color_igv() + NoLegend()
p4 <- DimPlot(int.3WT, reduction = "wnn.umap", group.by = "wsnn_res.5", label = T, repel = T) + scale_color_igv() + NoLegend()
p5 <- DimPlot(int.3WT, reduction = "wnn.umap", group.by = "wsnn_res.6", label = T, repel = T) + scale_color_igv() + NoLegend()
p6 <- DimPlot(int.3WT, reduction = "wnn.umap", group.by = "Clusters", label = T, repel = T) + scale_color_igv() + NoLegend()
(p1 + p2 + p3) / (p4 + p5 + p6)
Warning: ggrepel: 4 unlabeled data points (too many overlaps). Consider increasing max.overlaps

saveRDS(int.3WT, file = "RDSfiles/int.neural.3WT.RDS")

Resolution Note

Based on what I’m seeing resolution 5 might be what we want since it separates r1, r2, r1&r2, r4 and DorsNT into separate clusters. Resolution 6 only further resolves cluster 5 in res 5 (MHB) into clusters 18 and 28 in res 6.

Res 5 clustering split by Sample

p1 <- DimPlot(int.3WT, reduction = "wnn.umap", group.by = "wsnn_res.5", split.by = "orig.ident", label = T, repel = T) + scale_color_igv()
p1

Original Cluster names split by Sample

DimPlot(int.3WT, reduction = "wnn.umap", group.by = "Clusters", split.by = "orig.ident", label = T, repel = T, ncol = 3) + scale_color_igv() + NoLegend()

Tables of Cell Counts

as.data.frame(table(int.3WT$Clusters, int.3WT$wsnn_res.5)) %>%
  tidyr::pivot_wider(names_from = "Var2", values_from = "Freq") %>%
  rename("Cluster" = "Var1") %>%
  mutate(Cluster = gsub(" ","",Cluster)) %>%
  mutate(across(everything(), gsub, pattern = "^0$", replacement = ".")) %>%
  kbl(caption = "Cell Count Orig Clusters by Res 5 clusters") %>%
  kable_classic(full_width = F, "striped")
Cell Count Orig Clusters by Res 5 clusters
Cluster 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
CHB.1 46 19 . 14 . . . 3 45 . . . 1 . . . . . . 4 . . . . 4 . . . . 1 . 1 . . 6 . 1 . . . . 1
CHB.2 71 . . 41 . . . 1 3 . . . . . . . . . . 2 . . . . . . . 1 . . . . . . 14 . . 1 . . . 4
CHB.3 . 2 . 60 . . . 2 29 . . . . 2 . . . . . . . . . . 1 . . . 1 1 . . . 1 14 . . . . . . 1
CHB.4 8 . . . . . . 1 . . . . . . . . . . . . . . . . . . . . . 10 . . . . . . . . . . . 1
Ciliated . . . . . . . . . . . . . . . . . . . . . . 1 . 14 . . . 44 . 1 . . . . . 1 1 . 2 . .
DorsNT&NC . . 4 . . . . . . . . . 29 . . . . . . . 23 . . . . . . . . 1 . . . . . . . . . . . .
FB . . . . 2 . . . . . 1 10 . . 1 . . . 35 . . . . 16 . . 1 . 2 3 4 . 5 . . . . . 1 . . .
FB&eye.2 . . . . . . . . . . . . . . . . . . . . . . 8 2 . . . . . . . 1 15 . . . . . 9 . . .
FB&eye.1 . . . . . 1 . . . . . 37 . . . . . . . . . . 1 . . . . . . 2 . . . . . . . . . . . .
FB&eye.3 . . . . . . . . . . . . . . . . . . . . . . 17 . . . . . . . . . 1 . . . . . 8 . . .
FB&eye.4 . . . . . . . . . . . . . . . . . . 1 . . . 7 1 . . . . . . . . 9 . . . . . 4 . . .
FB&eye.5 . . . . . 16 . . . . . . . . 2 . . . . . . . . . . . . . . 1 . . . . . . . . . . . .
FB&eye.6 . . . . . . . . . . . . . . . . . . . . . . 17 . . . . . . . . . . . . . . . 1 . . .
FB&eye.7 . . . . . . . . . . . . . . . . . . . . . . 5 1 . . . . . . . . 4 . . . . . 2 . . .
FB&eye.8 . . . . . . . . . . . . . . . . . . . . . . 1 . . . . . . 1 . . . . . . . . . . . .
FB.1 . . . . . . . . . . . . . . . . . . . . . . . 35 . . . . . 1 . . . . . . . . . . . 1
FB.2 . . . . . . . 1 . . . 26 . . . . . . . . . . . 1 . . . . . . . . . . . . . . 1 . . .
FB.3 . . . . . . . . . . . . . . . . . . 23 . . . . 2 . . . . . . . . . . . . . . 1 . . .
FB.4 . . . . 1 . . . . 1 . . . 1 . . . . . . . . . . . . . . 1 . 21 . . . . . . . . . . .
HB.1 . . 19 . . . . . . . . . 8 6 . 7 2 . . . 3 2 . . . 1 . . . 5 . . . . . . . 2 . . 1 1
HB.2 1 . . 2 . . . . . . . . . 7 . . . 1 . . 2 1 . . . . . 4 . 1 . . . . 1 . . 21 . . . .
HB.3 2 . . . . . . 1 . . . . . 1 . . . . . . 5 . . . . . . . . 2 . . 1 . . . . 2 . . . .
MB . . . . 11 2 . . . . 1 . . . 29 . . . . . . 1 . . . . 2 . . 2 1 . . . . . . . . . . .
MB.1 . . . . 36 1 . . . 1 . 1 . . 34 . . . 2 . . . . . . . 4 . . 2 12 . . . . . . . 1 . . .
MB.2 . . . . 31 21 . . . 1 . . . . 5 . . . . . 1 . . . . . 6 . . 2 . . 1 . . . . . . . . 1
MB.3 . . . . 30 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MHB.1 . . . . 7 2 58 1 . 20 . . 1 . . 2 . . . . . . . . . 24 8 . . 2 1 . . . . . . . . . 3 .
MHB.2 . . . . . 44 17 . . 16 . . . 1 . . . . . . . . . . . 7 7 . . 1 . . . . . . . . . . 11 1
MHB.3 . . . . . 22 24 . . 14 . . 1 . . . . . . . . . . . . 2 24 . . 2 . . . 1 . . . . . . 1 1
MHB.4 . . . . 1 3 . . . 24 . . . . . . . . . . . . . . . 2 . . . 1 . . . . . . . . . . . .
MHB.5 . . . . . . 4 . . 1 . . . . . . . . . . . . . . . 16 . . . . . . . . . . . . . . . .
NC.1 . . . . . . . 1 . . 1 . . . . . . . . . . . . . . . . . . 1 . . . 1 . 2 20 . . 20 . .
NC.2 6 . . . . . . 2 . . . . . . . . . . . 4 . . . . 1 . . . . . . . . . 1 . 2 1 . . . .
Neuron . . . . . . . 62 . . . . . . . . . . 1 . . . 1 . . . . . . . . . . . . 34 1 . . . 1 .
r1 . . . . . . 2 . . . . . 4 1 . 59 1 . . . . . . . . 2 . . . . . . . 10 . . . 1 . . . .
r1&r2 . . . . . . . 1 . . . . 22 . . 1 4 . . . 1 . . . . . . . . . . . . . . . . . . . . .
r2 . . . . . . . . . . . . 3 5 . . 59 . . . 1 . . . . . . . 1 . . . . 23 . . . . . . . .
r3 . . 98 . . . . . . . . . . . . . . . . . . . . . . . . . . 1 . . . . . . . . . . . 2
r4 . . . . . . . 1 1 . . . . 48 . . 1 . . . 23 . . . . . . . . . . . . 1 . . . . . . . 1
r5 . . 1 . . . . . . . . . 1 . . . . 20 . . . 20 . . . . . . . . . . 1 . . . . . . . . 1
r5.1 . . 2 . . . . . . . . . . . . . . 42 . . . 1 . . . . . 1 . . . . . . . . . . . . . .
r5.2 . . 2 . . . . . . . . . . . . . . 3 . . . 35 . . . . . . . . . . . . . . . . . . . .
r6 1 . . . . . . . . . . . 2 . . . . . . . . . . . . . . 45 . . . 37 . 1 . . . . . . . .
SC.1 . 68 . . . . . 5 1 . 42 . 1 . . . . . . 1 . . . . 21 . . . . 1 . . . . . . . . . . . .
SC.2 . 40 . 3 . . . 2 1 . 11 . . . . . . . . 21 1 . . . 16 . . . . . . . 1 . 1 . 2 . . . . 1
SC.3 . 4 . . . . . . . . 21 . . . . . . . . 30 . . . . . . . . . . . . . . . . 3 . . 5 . .
as.data.frame(table(int.3WT$orig.ident, int.3WT$wsnn_res.5)) %>%
  tidyr::pivot_wider(names_from = "Var2", values_from = "Freq") %>%
  rename("Sample" = "Var1") %>%
  kbl(caption = "Cell Count Sample by Res 5 clusters") %>%
  kable_classic(full_width = F, "striped")
Cell Count Sample by Res 5 clusters
Sample 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
HB10hpf 27 43 19 10 20 39 18 7 5 22 55 37 9 15 31 7 2 1 32 10 11 4 56 4 21 10 15 4 3 19 6 1 36 1 36 2 22 27 25 23 16 5
HB13hpf 46 38 45 44 61 39 50 26 31 37 12 27 26 24 32 27 35 20 24 22 23 20 1 38 14 20 22 24 24 8 21 16 2 10 0 18 7 1 3 2 0 10
HB16hpf 62 52 62 66 38 34 37 51 44 19 10 10 38 33 8 35 30 45 6 30 26 36 1 16 22 24 15 23 22 17 13 22 0 27 1 16 1 1 0 2 1 2
as.data.frame(table(int.3WT$Clusters, int.3WT$orig.ident)) %>%
  tidyr::pivot_wider(names_from = "Var2", values_from = "Freq") %>%
  rename("Cluster" = "Var1") %>%
  mutate(Cluster = gsub(" ","",Cluster)) %>%
  mutate(across(everything(), gsub, pattern = "^0$", replacement = ".")) %>%
  kbl(caption = "Cell Count Orig Clusters by Sample") %>%
  kable_classic(full_width = F, "striped")
Cell Count Orig Clusters by Sample
Cluster HB10hpf HB13hpf HB16hpf
CHB.1 38 51 57
CHB.2 36 46 56
CHB.3 24 38 52
CHB.4 . . 20
Ciliated . 28 36
DorsNT&NC . . 57
FB 49 . 32
FB&eye.2 35 . .
FB&eye.1 41 . .
FB&eye.3 26 . .
FB&eye.4 22 . .
FB&eye.5 19 . .
FB&eye.6 18 . .
FB&eye.7 12 . .
FB&eye.8 2 . .
FB.1 . 37 .
FB.2 . 29 .
FB.3 . 26 .
FB.4 . 25 .
HB.1 57 . .
HB.2 41 . .
HB.3 14 . .
MB 49 . .
MB.1 . 37 57
MB.2 . 36 33
MB.3 . 30 .
MHB.1 39 45 45
MHB.2 37 35 33
MHB.3 31 34 27
MHB.4 . 31 .
MHB.5 . 21 .
NC.1 46 . .
NC.2 17 . .
Neuron . 37 63
r1 . 39 41
r1&r2 . 29 .
r2 . 37 55
r3 . 47 54
r4 . 38 38
r5 . 44 .
r5.1 . . 46
r5.2 . . 40
r6 . 38 48
SC.1 49 44 47
SC.2 38 31 31
SC.3 16 17 30
as.data.frame(table(int.3WT$Clusters[int.3WT$orig.ident == "HB10hpf"], int.3WT$wsnn_res.5[int.3WT$orig.ident == "HB10hpf"])) %>%
  tidyr::pivot_wider(names_from = "Var2", values_from = "Freq") %>%
  rename("Cluster" = "Var1") %>%
  mutate(Cluster = gsub(" ","",Cluster)) %>%
  mutate(across(everything(), gsub, pattern = "^0$", replacement = ".")) %>%
  kbl(caption = "HB10hpf cell count") %>%
  kable_classic(full_width = F, "striped")
HB10hpf cell count
Cluster 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
CHB.1 . 18 . 1 . . . 2 3 . . . . . . . . . . 3 . . . . 4 . . . . 1 . . . . 6 . . . . . . .
CHB.2 18 . . . . . . 1 . . . . . . . . . . . 1 . . . . . . . . . . . . . . 14 . . 1 . . . 1
CHB.3 . . . 7 . . . . 1 . . . . . . . . . . . . . . . . . . . 1 . . . . . 14 . . . . . . 1
FB . . . . 2 . . . . . 1 . . . . . . . 31 . . . . . . . 1 . 2 2 4 . 5 . . . . . 1 . . .
FB&eye.2 . . . . . . . . . . . . . . . . . . . . . . 8 2 . . . . . . . 1 15 . . . . . 9 . . .
FB&eye.1 . . . . . 1 . . . . . 37 . . . . . . . . . . 1 . . . . . . 2 . . . . . . . . . . . .
FB&eye.3 . . . . . . . . . . . . . . . . . . . . . . 17 . . . . . . . . . 1 . . . . . 8 . . .
FB&eye.4 . . . . . . . . . . . . . . . . . . 1 . . . 7 1 . . . . . . . . 9 . . . . . 4 . . .
FB&eye.5 . . . . . 16 . . . . . . . . 2 . . . . . . . . . . . . . . 1 . . . . . . . . . . . .
FB&eye.6 . . . . . . . . . . . . . . . . . . . . . . 17 . . . . . . . . . . . . . . . 1 . . .
FB&eye.7 . . . . . . . . . . . . . . . . . . . . . . 5 1 . . . . . . . . 4 . . . . . 2 . . .
FB&eye.8 . . . . . . . . . . . . . . . . . . . . . . 1 . . . . . . 1 . . . . . . . . . . . .
HB.1 . . 19 . . . . . . . . . 8 6 . 7 2 . . . 3 2 . . . 1 . . . 5 . . . . . . . 2 . . 1 1
HB.2 1 . . 2 . . . . . . . . . 7 . . . 1 . . 2 1 . . . . . 4 . 1 . . . . 1 . . 21 . . . .
HB.3 2 . . . . . . 1 . . . . . 1 . . . . . . 5 . . . . . . . . 2 . . 1 . . . . 2 . . . .
MB . . . . 11 2 . . . . 1 . . . 29 . . . . . . 1 . . . . 2 . . 2 1 . . . . . . . . . . .
MHB.1 . . . . 7 2 . . . 17 . . . . . . . . . . . . . . . 1 8 . . . 1 . . . . . . . . . 3 .
MHB.2 . . . . . . 16 . . . . . . 1 . . . . . . . . . . . 7 . . . 1 . . . . . . . . . . 11 1
MHB.3 . . . . . 18 2 . . 5 . . . . . . . . . . . . . . . 1 4 . . . . . . . . . . . . . 1 .
NC.1 . . . . . . . 1 . . 1 . . . . . . . . . . . . . . . . . . 1 . . . 1 . 2 20 . . 20 . .
NC.2 6 . . . . . . 2 . . . . . . . . . . . 4 . . . . 1 . . . . . . . . . 1 . 2 1 . . . .
SC.1 . 6 . . . . . . . . 42 . 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SC.2 . 16 . . . . . . 1 . 2 . . . . . . . . . 1 . . . 16 . . . . . . . 1 . . . . . . . . 1
SC.3 . 3 . . . . . . . . 8 . . . . . . . . 2 . . . . . . . . . . . . . . . . . . . 3 . .
as.data.frame(table(int.3WT$Clusters[int.3WT$orig.ident == "HB13hpf"], int.3WT$wsnn_res.5[int.3WT$orig.ident == "HB13hpf"])) %>%
  tidyr::pivot_wider(names_from = "Var2", values_from = "Freq") %>%
  rename("Cluster" = "Var1") %>%
  mutate(Cluster = gsub(" ","",Cluster)) %>%
  mutate(across(everything(), gsub, pattern = "^0$", replacement = ".")) %>%
  kbl(caption = "HB13hpf cell count") %>%
  kable_classic(full_width = F, "striped")
HB13hpf cell count
Cluster 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
CHB.1 46 . . . . . . . . . . . 1 . . . . . . 1 . . . . . . . . . . . 1 . . . . 1 . . . . 1
CHB.2 . . . 39 . . . . 3 . . . . . . . . . . . . . . . . . . 1 . . . . . . . . . . . . . 3
CHB.3 . 2 . 2 . . . 2 27 . . . . 2 . . . . . . . . . . 1 . . . . 1 . . . 1 . . . . . . . .
Ciliated . . . . . . . . . . . . . . . . . . . . . . 1 . 4 . . . 23 . . . . . . . . . . . . .
FB.1 . . . . . . . . . . . . . . . . . . . . . . . 35 . . . . . 1 . . . . . . . . . . . 1
FB.2 . . . . . . . 1 . . . 26 . . . . . . . . . . . 1 . . . . . . . . . . . . . . 1 . . .
FB.3 . . . . . . . . . . . . . . . . . . 23 . . . . 2 . . . . . . . . . . . . . . 1 . . .
FB.4 . . . . 1 . . . . 1 . . . 1 . . . . . . . . . . . . . . 1 . 21 . . . . . . . . . . .
MB.1 . . . . 1 1 . . . . . 1 . . 30 . . . 1 . . . . . . . . . . 2 . . . . . . . . 1 . . .
MB.2 . . . . 28 . . . . 1 . . . . 2 . . . . . 1 . . . . . 1 . . 1 . . 1 . . . . . . . . 1
MB.3 . . . . 30 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MHB.1 . . . . . . 43 . . . . . 1 . . . . . . . . . . . . . . . . 1 . . . . . . . . . . . .
MHB.2 . . . . . 32 1 . . 1 . . . . . . . . . . . . . . . . 1 . . . . . . . . . . . . . . .
MHB.3 . . . . . 3 . . . 9 . . . . . . . . . . . . . . . . 20 . . . . . . 1 . . . . . . . 1
MHB.4 . . . . 1 3 . . . 24 . . . . . . . . . . . . . . . 2 . . . 1 . . . . . . . . . . . .
MHB.5 . . . . . . 4 . . 1 . . . . . . . . . . . . . . . 16 . . . . . . . . . . . . . . . .
Neuron . . . . . . . 18 . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 1 . . . . .
r1 . . . . . . 2 . . . . . 1 1 . 26 1 . . . . . . . . 2 . . . . . . . 5 . . . 1 . . . .
r1&r2 . . . . . . . 1 . . . . 22 . . 1 4 . . . 1 . . . . . . . . . . . . . . . . . . . . .
r2 . . . . . . . . . . . . . 4 . . 30 . . . . . . . . . . . . . . . . 3 . . . . . . . .
r3 . . 44 . . . . . . . . . . . . . . . . . . . . . . . . . . 1 . . . . . . . . . . . 2
r4 . . . . . . . 1 . . . . . 16 . . . . . . 21 . . . . . . . . . . . . . . . . . . . . .
r5 . . 1 . . . . . . . . . 1 . . . . 20 . . . 20 . . . . . . . . . . 1 . . . . . . . . 1
r6 . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 . . . 15 . . . . . . . . . .
SC.1 . 31 . . . . . 3 1 . . . . . . . . . . . . . . . 9 . . . . . . . . . . . . . . . . .
SC.2 . 5 . 3 . . . . . . . . . . . . . . . 21 . . . . . . . . . . . . . . . . 2 . . . . .
SC.3 . . . . . . . . . . 12 . . . . . . . . . . . . . . . . . . . . . . . . . 3 . . 2 . .
as.data.frame(table(int.3WT$Clusters[int.3WT$orig.ident == "HB16hpf"], int.3WT$wsnn_res.5[int.3WT$orig.ident == "HB16hpf"])) %>%
  tidyr::pivot_wider(names_from = "Var2", values_from = "Freq") %>%
  rename("Cluster" = "Var1") %>%
  mutate(Cluster = gsub(" ","",Cluster)) %>%
  mutate(across(everything(), gsub, pattern = "^0$", replacement = ".")) %>%
  kbl(caption = "HB16hpf cell count") %>%
  kable_classic(full_width = F, "striped")
HB16hpf cell count
Cluster 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
CHB.1 . 1 . 13 . . . 1 42 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CHB.2 53 . . 2 . . . . . . . . . . . . . . . 1 . . . . . . . . . . . . . . . . . . . . . .
CHB.3 . . . 51 . . . . 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CHB.4 8 . . . . . . 1 . . . . . . . . . . . . . . . . . . . . . 10 . . . . . . . . . . . 1
Ciliated . . . . . . . . . . . . . . . . . . . . . . . . 10 . . . 21 . 1 . . . . . 1 1 . 2 . .
DorsNT&NC . . 4 . . . . . . . . . 29 . . . . . . . 23 . . . . . . . . 1 . . . . . . . . . . . .
FB . . . . . . . . . . . 10 . . 1 . . . 4 . . . . 16 . . . . . 1 . . . . . . . . . . . .
MB.1 . . . . 35 . . . . 1 . . . . 4 . . . 1 . . . . . . . 4 . . . 12 . . . . . . . . . . .
MB.2 . . . . 3 21 . . . . . . . . 3 . . . . . . . . . . . 5 . . 1 . . . . . . . . . . . .
MHB.1 . . . . . . 15 1 . 3 . . . . . 2 . . . . . . . . . 23 . . . 1 . . . . . . . . . . . .
MHB.2 . . . . . 12 . . . 15 . . . . . . . . . . . . . . . . 6 . . . . . . . . . . . . . . .
MHB.3 . . . . . 1 22 . . . . . 1 . . . . . . . . . . . . 1 . . . 2 . . . . . . . . . . . .
Neuron . . . . . . . 44 . . . . . . . . . . 1 . . . 1 . . . . . . . . . . . . 16 . . . . 1 .
r1 . . . . . . . . . . . . 3 . . 33 . . . . . . . . . . . . . . . . . 5 . . . . . . . .
r2 . . . . . . . . . . . . 3 1 . . 29 . . . 1 . . . . . . . 1 . . . . 20 . . . . . . . .
r3 . . 54 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
r4 . . . . . . . . 1 . . . . 32 . . 1 . . . 2 . . . . . . . . . . . . 1 . . . . . . . 1
r5.1 . . 2 . . . . . . . . . . . . . . 42 . . . 1 . . . . . 1 . . . . . . . . . . . . . .
r5.2 . . 2 . . . . . . . . . . . . . . 3 . . . 35 . . . . . . . . . . . . . . . . . . . .
r6 1 . . . . . . . . . . . 2 . . . . . . . . . . . . . . 22 . . . 22 . 1 . . . . . . . .
SC.1 . 31 . . . . . 2 . . . . . . . . . . . 1 . . . . 12 . . . . 1 . . . . . . . . . . . .
SC.2 . 19 . . . . . 2 . . 9 . . . . . . . . . . . . . . . . . . . . . . . 1 . . . . . . .
SC.3 . 1 . . . . . . . . 1 . . . . . . . . 28 . . . . . . . . . . . . . . . . . . . . . .

Remove FB and FB&eye clusters

Rational: the amount of FB or FB&eye was dissection specific and not possible to precisely control.

After examining Cell Count Original Clusters by Res 5 clusters will remove clusters: 11, 18, 22, 23, 32 and 38

Will keep 29 – this has lots of cells from a variety of clusters and may be interesting Will keep 5 – this is in with MB clusters and may have been mislabeled previously.
Will also keep 30 since this more closely associated with MB clusters than FB clusters.

Idents(int.3WT) <- "wsnn_res.5"
int.3WT.subset <- subset(int.3WT, idents = c("11","18","22","23","32","38"), invert = TRUE)
DimPlot(int.3WT.subset, reduction = "wnn.umap", label = T, repel = T) + scale_color_igv()

Res 5 clustering split by Sample

p1 <- DimPlot(int.3WT.subset, reduction = "wnn.umap", group.by = "wsnn_res.5", split.by = "orig.ident", label = T, repel = T) + scale_color_igv()
p1

Original Cluster names split by Sample

DimPlot(int.3WT.subset, reduction = "wnn.umap", group.by = "Clusters", split.by = "orig.ident", label = T, repel = T, ncol = 3) + scale_color_igv() + NoLegend()

Idents(int.3WT.subset) <- "Clusters"
HB1cells <- WhichCells(int.3WT.subset, idents = "HB.1")
HB2cells <- WhichCells(int.3WT.subset, idents = "HB.2")
HB3cells <- WhichCells(int.3WT.subset, idents = "HB.3")
p1 <- DimPlot(int.3WT.subset, group.by = "wsnn_res.5", cells.highlight = HB1cells, reduction = "wnn.umap") + NoLegend() + ggtitle("HB.1 cells")
p2 <- DimPlot(int.3WT.subset, group.by = "wsnn_res.5", cells.highlight = HB2cells, reduction = "wnn.umap") + NoLegend() + ggtitle("HB.2 cells")
p3 <- DimPlot(int.3WT.subset, group.by = "wsnn_res.5", cells.highlight = HB3cells, reduction = "wnn.umap") + NoLegend() + ggtitle("HB.3 cells")
p4 <- DimPlot(int.3WT.subset, group.by = "wsnn_res.5", reduction = "wnn.umap", label = TRUE, repel = T) + NoLegend() + scale_color_igv()
(p1 + p2) / (p3 + p4)

Since there are still a few cells which were originally called FB or FB&eye in other clusters, these labels are still in the metadata table and are still cluttering up the UMAP. So will remove all labels with “FB” in them from UMAP of cluster labels.

int.3WT.subset$fixedClusters <- int.3WT.subset$Clusters
int.3WT.subset$fixedClusters[grep("FB", int.3WT.subset$fixedClusters)] <- " "
p1 <- DimPlot(int.3WT.subset, group.by = "fixedClusters", cells.highlight = HB1cells, reduction = "wnn.umap") + NoLegend() + ggtitle("HB.1 cells")
p2 <- DimPlot(int.3WT.subset, group.by = "fixedClusters", cells.highlight = HB2cells, reduction = "wnn.umap") + NoLegend() + ggtitle("HB.2 cells")
p3 <- DimPlot(int.3WT.subset, group.by = "fixedClusters", cells.highlight = HB3cells, reduction = "wnn.umap") + NoLegend() + ggtitle("HB.3 cells")
p4 <- DimPlot(int.3WT.subset, group.by = "fixedClusters", reduction = "wnn.umap", label = TRUE, repel = T) + NoLegend() + scale_color_igv()
(p1 + p2) / (p3 + p4)

Idents(int.3WT.subset) <- "wsnn_res.5"
All.markers <- FindAllMarkers(int.3WT.subset, only.pos = TRUE)
write.table(All.markers, file = "../results/int3WT.subset.markers.res.5.txt", sep = "\t", quote = F, col.names = NA)
cellCount <- as.data.frame(table(int.3WT.subset$Clusters, int.3WT.subset$wsnn_res.5, int.3WT.subset$orig.ident)) %>%
  dplyr::filter(!Freq == 0)
write.table(cellCount, file = "../results/int3WT.cellCount.res.5.txt", quote = F, sep = "\t", row.names = FALSE)

After determining cluster cell types, adding as “intClusters”

DimPlot(int.3WT.subset, group.by = "wsnn_res.5", reduction = "wnn.umap", label = TRUE, repel = T) + NoLegend() + scale_color_igv()

Idents(int.3WT.subset) <- "wsnn_res.5"
int.3WT.subset <- RenameIdents(int.3WT.subset,
                               "0" = "CaudHB.1",
                               "1" = "SC.1",
                               "2" = "r3.1",
                               "3" = "CaudHB.2",
                               "4" = "MB.1",
                               "5" = "MHB.1",
                               "6" = "MHB.2",
                               "7" = "Neuron.1",
                               "8" = "CaudHB.3",
                               "9" = "MHB.3",
                               "10" = "SC.2",
                               "12" = "r1&r2.1",
                               "13" = "r4.1",
                               "14" = "MB.2",
                               "15" = "r1",
                               "16" = "r2",
                               "17" = "r5.1",
                               "19" = "SC.3",
                               "20" = "r4.2",
                               "21" = "r5.2",
                               "24" = "SC.4",
                               "25" = "MHB.4",
                               "26" = "MHB.5",
                               "27" = "r6.1",
                               "28" = "Ciliated",
                               "29" = "Neurog",
                               "30" = "MB.3",
                               "31" = "r6.2",
                               "33" = "r1&r2.2",
                               "34" = "CaudHB.4",
                               "35" = "Neuron.2",
                               "36" = "NC.1",
                               "37" = "HB",
                               "39" = "NC.2",
                               "40" = "MHB.6",
                               "41" = "Mitochondrial")
int.3WT.subset$intClusters <- Idents(int.3WT.subset)
DimPlot(int.3WT.subset, reduction = "wnn.umap", label = TRUE, repel = T) + NoLegend() + scale_color_igv() + ggtitle("Integrated Neural Clusters")

saveRDS(int.3WT.subset, file = "RDSfiles/int.neural.3WT.subset.RDS")
sessionInfo()
R version 4.1.0 (2021-05-18)
Platform: x86_64-apple-darwin17.0 (64-bit)
Running under: macOS 12.3

Matrix products: default
LAPACK: /Library/Frameworks/R.framework/Versions/4.1/Resources/lib/libRlapack.dylib

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats4    stats     graphics  grDevices datasets  utils     methods   base     

other attached packages:
 [1] ensembldb_2.18.0                    AnnotationFilter_1.18.0            
 [3] GenomicFeatures_1.46.1              AnnotationHub_3.2.0                
 [5] BiocFileCache_2.2.0                 dbplyr_2.1.1                       
 [7] harmony_0.1.0                       Rcpp_1.0.7                         
 [9] motifmatchr_1.16.0                  TFBSTools_1.32.0                   
[11] patchwork_1.1.1                     JASPAR2020_0.99.10                 
[13] limma_3.50.3                        ggsci_2.9                          
[15] ggplot2_3.3.5                       dplyr_1.0.7                        
[17] kableExtra_1.3.4                    knitr_1.36                         
[19] Signac_1.2.1                        BSgenome.Drerio.UCSC.danRer11_1.4.2
[21] BSgenome_1.62.0                     rtracklayer_1.54.0                 
[23] Biostrings_2.62.0                   XVector_0.34.0                     
[25] GenomicRanges_1.46.0                GenomeInfoDb_1.30.0                
[27] org.Dr.eg.db_3.14.0                 AnnotationDbi_1.56.1               
[29] IRanges_2.28.0                      S4Vectors_0.32.4                   
[31] Biobase_2.54.0                      BiocGenerics_0.40.0                
[33] SeuratObject_4.0.4                  Seurat_4.0.1                       

loaded via a namespace (and not attached):
  [1] rappdirs_0.3.3                SnowballC_0.7.0               scattermore_0.7              
  [4] R.methodsS3_1.8.1             ragg_1.2.2                    tidyr_1.1.4                  
  [7] nabor_0.5.0                   bit64_4.0.5                   irlba_2.3.3                  
 [10] DelayedArray_0.20.0           R.utils_2.11.0                data.table_1.14.2            
 [13] rpart_4.1-15                  KEGGREST_1.34.0               RCurl_1.98-1.5               
 [16] generics_0.1.1                cowplot_1.1.1                 RSQLite_2.2.8                
 [19] RANN_2.6.1                    chromVAR_1.16.0               future_1.26.1                
 [22] bit_4.0.4                     tzdb_0.2.0                    spatstat.data_2.1-0          
 [25] webshot_0.5.2                 xml2_1.3.2                    httpuv_1.6.3                 
 [28] SummarizedExperiment_1.24.0   assertthat_0.2.1              DirichletMultinomial_1.36.0  
 [31] xfun_0.27                     hms_1.1.1                     jquerylib_0.1.4              
 [34] evaluate_0.14                 promises_1.2.0.1              progress_1.2.2               
 [37] fansi_0.5.0                   restfulr_0.0.13               caTools_1.18.2               
 [40] igraph_1.2.8                  DBI_1.1.1                     htmlwidgets_1.5.4            
 [43] sparsesvd_0.2                 spatstat.geom_2.3-0           purrr_0.3.4                  
 [46] ellipsis_0.3.2                RSpectra_0.16-0               backports_1.3.0              
 [49] annotate_1.72.0               biomaRt_2.50.0                deldir_1.0-6                 
 [52] MatrixGenerics_1.6.0          vctrs_0.4.1                   ROCR_1.0-11                  
 [55] abind_1.4-5                   cachem_1.0.6                  withr_2.4.2                  
 [58] ggforce_0.3.3                 checkmate_2.0.0               sctransform_0.3.3            
 [61] GenomicAlignments_1.30.0      prettyunits_1.1.1             goftest_1.2-3                
 [64] svglite_2.0.0                 cluster_2.1.2                 ape_5.5                      
 [67] lazyeval_0.2.2                seqLogo_1.60.0                crayon_1.4.2                 
 [70] pkgconfig_2.0.3               slam_0.1-48                   labeling_0.4.2               
 [73] tweenr_1.0.2                  ProtGenerics_1.26.0           nlme_3.1-153                 
 [76] nnet_7.3-16                   rlang_1.0.3                   globals_0.15.1               
 [79] lifecycle_1.0.1               miniUI_0.1.1.1                filelock_1.0.2               
 [82] dichromat_2.0-0               polyclip_1.10-0               matrixStats_0.61.0           
 [85] lmtest_0.9-38                 Matrix_1.3-4                  ggseqlogo_0.1                
 [88] zoo_1.8-9                     base64enc_0.1-3               ggridges_0.5.3               
 [91] png_0.1-7                     viridisLite_0.4.0             rjson_0.2.20                 
 [94] bitops_1.0-7                  R.oo_1.24.0                   KernSmooth_2.23-20           
 [97] blob_1.2.2                    stringr_1.4.0                 parallelly_1.32.0            
[100] jpeg_0.1-9                    readr_2.0.2                   CNEr_1.30.0                  
[103] scales_1.1.1                  memoise_2.0.0                 magrittr_2.0.1               
[106] plyr_1.8.6                    ica_1.0-2                     zlibbioc_1.40.0              
[109] compiler_4.1.0                BiocIO_1.4.0                  RColorBrewer_1.1-2           
[112] fitdistrplus_1.1-6            Rsamtools_2.10.0              cli_3.3.0                    
[115] listenv_0.8.0                 pbapply_1.5-0                 htmlTable_2.3.0              
[118] Formula_1.2-4                 MASS_7.3-54                   mgcv_1.8-38                  
[121] tidyselect_1.1.1              stringi_1.7.5                 textshaping_0.3.6            
[124] highr_0.9                     yaml_2.2.1                    latticeExtra_0.6-29          
[127] ggrepel_0.9.1                 grid_4.1.0                    VariantAnnotation_1.40.0     
[130] sass_0.4.0                    fastmatch_1.1-3               tools_4.1.0                  
[133] future.apply_1.8.1            parallel_4.1.0                rstudioapi_0.13              
[136] TFMPvalue_0.0.8               foreign_0.8-81                lsa_0.73.2                   
[139] gridExtra_2.3                 farver_2.1.0                  Rtsne_0.15                   
[142] digest_0.6.28                 BiocManager_1.30.16           shiny_1.7.1                  
[145] pracma_2.3.3                  qlcMatrix_0.9.7               BiocVersion_3.14.0           
[148] later_1.3.0                   RcppAnnoy_0.0.19              httr_1.4.2                   
[151] rsconnect_0.8.24              biovizBase_1.42.0             colorspace_2.0-2             
[154] rvest_1.0.2                   XML_3.99-0.8                  tensor_1.5                   
[157] reticulate_1.22               splines_4.1.0                 uwot_0.1.10                  
[160] RcppRoll_0.3.0                spatstat.utils_2.2-0          renv_0.15.5                  
[163] plotly_4.10.0                 systemfonts_1.0.4             xtable_1.8-4                 
[166] jsonlite_1.7.2                poweRlaw_0.70.6               R6_2.5.1                     
[169] Hmisc_4.6-0                   pillar_1.6.4                  htmltools_0.5.2              
[172] mime_0.12                     glue_1.6.2                    fastmap_1.1.0                
[175] DT_0.19                       BiocParallel_1.28.0           interactiveDisplayBase_1.32.0
[178] codetools_0.2-18              utf8_1.2.2                    lattice_0.20-45              
[181] bslib_0.3.1                   spatstat.sparse_2.0-0         tibble_3.1.6                 
[184] curl_4.3.2                    leiden_0.3.9                  gtools_3.9.2                 
[187] GO.db_3.14.0                  survival_3.2-13               rmarkdown_2.11               
[190] docopt_0.7.1                  munsell_0.5.0                 GenomeInfoDbData_1.2.7       
[193] reshape2_1.4.4                gtable_0.3.0                  spatstat.core_2.3-0          
LS0tCnRpdGxlOiAiTmV1cmFsIHN1YnNldHMgM1dUIGludGVncmF0ZWQgYW5hbHlzaXMgUiBOb3RlYm9vayIKb3V0cHV0OiAKICBodG1sX25vdGVib29rOgogICAgdG9jOiBUUlVFCiAgICB0b2NfZGVwdGg6IDIKICAgIHRvY19mbG9hdDogVFJVRQotLS0KCmBgYHtjc3MsIGVjaG8gPSBGfQpjYXB0aW9uIHsKICAgICAgY29sb3I6IGJsdWU7CiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICBmb250LXNpemU6IDIuMGVtOwogICAgfQpgYGAKCmBgYHtyLCByZXN1bHRzPUZ9CnN1cHByZXNzUGFja2FnZVN0YXJ0dXBNZXNzYWdlcyh7CiAgbGlicmFyeShTZXVyYXQpCiAgbGlicmFyeShvcmcuRHIuZWcuZGIpCiAgbGlicmFyeShCU2dlbm9tZS5EcmVyaW8uVUNTQy5kYW5SZXIxMSkKICBsaWJyYXJ5KFNpZ25hYykKICBsaWJyYXJ5KGtuaXRyKQogIGxpYnJhcnkoa2FibGVFeHRyYSkKICBsaWJyYXJ5KGRwbHlyKQogIGxpYnJhcnkoZ2dwbG90MikKICBsaWJyYXJ5KGdnc2NpKQogIGxpYnJhcnkobGltbWEpCiAgbGlicmFyeShKQVNQQVIyMDIwKQogIGxpYnJhcnkocGF0Y2h3b3JrKQogIGxpYnJhcnkoVEZCU1Rvb2xzKQogIGxpYnJhcnkobW90aWZtYXRjaHIpCiAgbGlicmFyeShBbm5vdGF0aW9uSHViKQogIGxpYnJhcnkoaGFybW9ueSkKfSkKb3B0aW9ucyhmdXR1cmUuZ2xvYmFscy5tYXhTaXplID0gNDAwMCAqIDEwMjReMikKYGBgCgojIFJlYWQgZGF0YQpgYGB7cn0KaW50LjNXVCA8LSByZWFkUkRTKGZpbGUgPSAiUkRTZmlsZXMvaW50Lm5ldXJhbC4zV1QuUkRTIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoPTEwLCBmaWcuaGVpZ2h0PTUsIHJlc3VsdHM9Rn0KcDEgPC0gRGltUGxvdChpbnQuM1dULCByZWR1Y3Rpb24gPSAid25uLnVtYXAiLCBncm91cC5ieSA9ICJ3c25uX3Jlcy4wLjgiLCBsYWJlbCA9IFQsIHJlcGVsID0gVCkgKyBzY2FsZV9jb2xvcl9pZ3YoKSArIE5vTGVnZW5kKCkKcDIgPC0gRGltUGxvdChpbnQuM1dULCByZWR1Y3Rpb24gPSAid25uLnVtYXAiLCBncm91cC5ieSA9ICJDbHVzdGVycyIsIGxhYmVsID0gVCwgcmVwZWwgPSBUKSArIHNjYWxlX2NvbG9yX2lndigpICsgTm9MZWdlbmQoKQpwMSArIHAyCmBgYAoKIyBJbmNyZWFzZSBjbHVzdGVyIHJlc29sdXRpb24KYGBge3J9CiMgcmVtb3ZlIG9sZCBpbmRpdmlkdWFsIGNsdXN0ZXIgcmVzb2x1dGlvbnMKaW50LjNXVCR3c25uX3Jlcy4xIDwtIE5VTEwKaW50LjNXVCR3c25uX3Jlcy4xLjUgPC0gTlVMTAppbnQuM1dUJHdzbm5fcmVzLjIgPC0gTlVMTAppbnQuM1dUJHdzbm5fcmVzLjIuNSA8LSBOVUxMCmludC4zV1Qkd3Nubl9yZXMuMyA8LSBOVUxMCmludC4zV1Qkd3Nubl9yZXMuMy41IDwtIE5VTEwKaW50LjNXVCR3c25uX3Jlcy42IDwtIE5VTEwKaW50LjNXVCR3c25uX3Jlcy44IDwtIE5VTEwKYGBgCgpgYGB7cn0KaW50LjNXVCA8LSBGaW5kQ2x1c3RlcnMoaW50LjNXVCwgZ3JhcGgubmFtZSA9ICJ3c25uIiwgcmVzb2x1dGlvbiA9IDIsIGFsZ29yaXRobSA9IDMsIHZlcmJvc2UgPSBGQUxTRSkKaW50LjNXVCA8LSBGaW5kQ2x1c3RlcnMoaW50LjNXVCwgZ3JhcGgubmFtZSA9ICJ3c25uIiwgcmVzb2x1dGlvbiA9IDMsIGFsZ29yaXRobSA9IDMsIHZlcmJvc2UgPSBGQUxTRSkKaW50LjNXVCA8LSBGaW5kQ2x1c3RlcnMoaW50LjNXVCwgZ3JhcGgubmFtZSA9ICJ3c25uIiwgcmVzb2x1dGlvbiA9IDQsIGFsZ29yaXRobSA9IDMsIHZlcmJvc2UgPSBGQUxTRSkKaW50LjNXVCA8LSBGaW5kQ2x1c3RlcnMoaW50LjNXVCwgZ3JhcGgubmFtZSA9ICJ3c25uIiwgcmVzb2x1dGlvbiA9IDUsIGFsZ29yaXRobSA9IDMsIHZlcmJvc2UgPSBGQUxTRSkKaW50LjNXVCA8LSBGaW5kQ2x1c3RlcnMoaW50LjNXVCwgZ3JhcGgubmFtZSA9ICJ3c25uIiwgcmVzb2x1dGlvbiA9IDYsIGFsZ29yaXRobSA9IDMsIHZlcmJvc2UgPSBGQUxTRSkKYGBgCgpgYGB7ciwgZmlnLndpZHRoPTEwLCBmaWcuaGVpZ2h0PTEwfQpwMSA8LSBEaW1QbG90KGludC4zV1QsIHJlZHVjdGlvbiA9ICJ3bm4udW1hcCIsIGdyb3VwLmJ5ID0gIndzbm5fcmVzLjIiLCBsYWJlbCA9IFQsIHJlcGVsID0gVCkgKyBzY2FsZV9jb2xvcl9pZ3YoKSArIE5vTGVnZW5kKCkKcDIgPC0gRGltUGxvdChpbnQuM1dULCByZWR1Y3Rpb24gPSAid25uLnVtYXAiLCBncm91cC5ieSA9ICJ3c25uX3Jlcy4zIiwgbGFiZWwgPSBULCByZXBlbCA9IFQpICsgc2NhbGVfY29sb3JfaWd2KCkgKyBOb0xlZ2VuZCgpCnAzIDwtIERpbVBsb3QoaW50LjNXVCwgcmVkdWN0aW9uID0gIndubi51bWFwIiwgZ3JvdXAuYnkgPSAid3Nubl9yZXMuNCIsIGxhYmVsID0gVCwgcmVwZWwgPSBUKSArIHNjYWxlX2NvbG9yX2lndigpICsgTm9MZWdlbmQoKQpwNCA8LSBEaW1QbG90KGludC4zV1QsIHJlZHVjdGlvbiA9ICJ3bm4udW1hcCIsIGdyb3VwLmJ5ID0gIndzbm5fcmVzLjUiLCBsYWJlbCA9IFQsIHJlcGVsID0gVCkgKyBzY2FsZV9jb2xvcl9pZ3YoKSArIE5vTGVnZW5kKCkKcDUgPC0gRGltUGxvdChpbnQuM1dULCByZWR1Y3Rpb24gPSAid25uLnVtYXAiLCBncm91cC5ieSA9ICJ3c25uX3Jlcy42IiwgbGFiZWwgPSBULCByZXBlbCA9IFQpICsgc2NhbGVfY29sb3JfaWd2KCkgKyBOb0xlZ2VuZCgpCnA2IDwtIERpbVBsb3QoaW50LjNXVCwgcmVkdWN0aW9uID0gIndubi51bWFwIiwgZ3JvdXAuYnkgPSAiQ2x1c3RlcnMiLCBsYWJlbCA9IFQsIHJlcGVsID0gVCkgKyBzY2FsZV9jb2xvcl9pZ3YoKSArIE5vTGVnZW5kKCkKKHAxICsgcDIgKyBwMykgLyAocDQgKyBwNSArIHA2KQoKYGBgCgpgYGB7cn0Kc2F2ZVJEUyhpbnQuM1dULCBmaWxlID0gIlJEU2ZpbGVzL2ludC5uZXVyYWwuM1dULlJEUyIpCmBgYAoKCiMjIyBSZXNvbHV0aW9uIE5vdGUKCkJhc2VkIG9uIHdoYXQgSSdtIHNlZWluZyByZXNvbHV0aW9uIDUgbWlnaHQgYmUgd2hhdCB3ZSB3YW50IHNpbmNlIGl0IHNlcGFyYXRlcyByMSwgcjIsIHIxJnIyLCByNCBhbmQgRG9yc05UIGludG8gc2VwYXJhdGUgY2x1c3RlcnMuICBSZXNvbHV0aW9uIDYgb25seSBmdXJ0aGVyIHJlc29sdmVzIGNsdXN0ZXIgNSBpbiByZXMgNSAoTUhCKSBpbnRvIGNsdXN0ZXJzIDE4IGFuZCAyOCBpbiByZXMgNi4KCiMjIFJlcyA1IGNsdXN0ZXJpbmcgc3BsaXQgYnkgU2FtcGxlCmBgYHtyLCBmaWcud2lkdGg9MTAsIGZpZy5oZWlnaHQ9NX0KcDEgPC0gRGltUGxvdChpbnQuM1dULCByZWR1Y3Rpb24gPSAid25uLnVtYXAiLCBncm91cC5ieSA9ICJ3c25uX3Jlcy41Iiwgc3BsaXQuYnkgPSAib3JpZy5pZGVudCIsIGxhYmVsID0gVCwgcmVwZWwgPSBUKSArIHNjYWxlX2NvbG9yX2lndigpCnAxCmBgYAoKIyMgT3JpZ2luYWwgQ2x1c3RlciBuYW1lcyBzcGxpdCBieSBTYW1wbGUKYGBge3IsIGZpZy53aWR0aD0xMCwgZmlnLmhlaWdodD01fQpEaW1QbG90KGludC4zV1QsIHJlZHVjdGlvbiA9ICJ3bm4udW1hcCIsIGdyb3VwLmJ5ID0gIkNsdXN0ZXJzIiwgc3BsaXQuYnkgPSAib3JpZy5pZGVudCIsIGxhYmVsID0gVCwgcmVwZWwgPSBULCBuY29sID0gMykgKyBzY2FsZV9jb2xvcl9pZ3YoKSArIE5vTGVnZW5kKCkKYGBgCgojIyBUYWJsZXMgb2YgQ2VsbCBDb3VudHMKYGBge3J9CmFzLmRhdGEuZnJhbWUodGFibGUoaW50LjNXVCRDbHVzdGVycywgaW50LjNXVCR3c25uX3Jlcy41KSkgJT4lCiAgdGlkeXI6OnBpdm90X3dpZGVyKG5hbWVzX2Zyb20gPSAiVmFyMiIsIHZhbHVlc19mcm9tID0gIkZyZXEiKSAlPiUKICByZW5hbWUoIkNsdXN0ZXIiID0gIlZhcjEiKSAlPiUKICBtdXRhdGUoQ2x1c3RlciA9IGdzdWIoIiAiLCIiLENsdXN0ZXIpKSAlPiUKICBtdXRhdGUoYWNyb3NzKGV2ZXJ5dGhpbmcoKSwgZ3N1YiwgcGF0dGVybiA9ICJeMCQiLCByZXBsYWNlbWVudCA9ICIuIikpICU+JQogIGtibChjYXB0aW9uID0gIkNlbGwgQ291bnQgT3JpZyBDbHVzdGVycyBieSBSZXMgNSBjbHVzdGVycyIpICU+JQogIGthYmxlX2NsYXNzaWMoZnVsbF93aWR0aCA9IEYsICJzdHJpcGVkIikKYGBgCgpgYGB7cn0KYXMuZGF0YS5mcmFtZSh0YWJsZShpbnQuM1dUJG9yaWcuaWRlbnQsIGludC4zV1Qkd3Nubl9yZXMuNSkpICU+JQogIHRpZHlyOjpwaXZvdF93aWRlcihuYW1lc19mcm9tID0gIlZhcjIiLCB2YWx1ZXNfZnJvbSA9ICJGcmVxIikgJT4lCiAgcmVuYW1lKCJTYW1wbGUiID0gIlZhcjEiKSAlPiUKICBrYmwoY2FwdGlvbiA9ICJDZWxsIENvdW50IFNhbXBsZSBieSBSZXMgNSBjbHVzdGVycyIpICU+JQogIGthYmxlX2NsYXNzaWMoZnVsbF93aWR0aCA9IEYsICJzdHJpcGVkIikKYGBgCgpgYGB7cn0KYXMuZGF0YS5mcmFtZSh0YWJsZShpbnQuM1dUJENsdXN0ZXJzLCBpbnQuM1dUJG9yaWcuaWRlbnQpKSAlPiUKICB0aWR5cjo6cGl2b3Rfd2lkZXIobmFtZXNfZnJvbSA9ICJWYXIyIiwgdmFsdWVzX2Zyb20gPSAiRnJlcSIpICU+JQogIHJlbmFtZSgiQ2x1c3RlciIgPSAiVmFyMSIpICU+JQogIG11dGF0ZShDbHVzdGVyID0gZ3N1YigiICIsIiIsQ2x1c3RlcikpICU+JQogIG11dGF0ZShhY3Jvc3MoZXZlcnl0aGluZygpLCBnc3ViLCBwYXR0ZXJuID0gIl4wJCIsIHJlcGxhY2VtZW50ID0gIi4iKSkgJT4lCiAga2JsKGNhcHRpb24gPSAiQ2VsbCBDb3VudCBPcmlnIENsdXN0ZXJzIGJ5IFNhbXBsZSIpICU+JQogIGthYmxlX2NsYXNzaWMoZnVsbF93aWR0aCA9IEYsICJzdHJpcGVkIikKYGBgCgpgYGB7cn0KYXMuZGF0YS5mcmFtZSh0YWJsZShpbnQuM1dUJENsdXN0ZXJzW2ludC4zV1Qkb3JpZy5pZGVudCA9PSAiSEIxMGhwZiJdLCBpbnQuM1dUJHdzbm5fcmVzLjVbaW50LjNXVCRvcmlnLmlkZW50ID09ICJIQjEwaHBmIl0pKSAlPiUKICB0aWR5cjo6cGl2b3Rfd2lkZXIobmFtZXNfZnJvbSA9ICJWYXIyIiwgdmFsdWVzX2Zyb20gPSAiRnJlcSIpICU+JQogIHJlbmFtZSgiQ2x1c3RlciIgPSAiVmFyMSIpICU+JQogIG11dGF0ZShDbHVzdGVyID0gZ3N1YigiICIsIiIsQ2x1c3RlcikpICU+JQogIG11dGF0ZShhY3Jvc3MoZXZlcnl0aGluZygpLCBnc3ViLCBwYXR0ZXJuID0gIl4wJCIsIHJlcGxhY2VtZW50ID0gIi4iKSkgJT4lCiAga2JsKGNhcHRpb24gPSAiSEIxMGhwZiBjZWxsIGNvdW50IikgJT4lCiAga2FibGVfY2xhc3NpYyhmdWxsX3dpZHRoID0gRiwgInN0cmlwZWQiKQpgYGAKCmBgYHtyfQphcy5kYXRhLmZyYW1lKHRhYmxlKGludC4zV1QkQ2x1c3RlcnNbaW50LjNXVCRvcmlnLmlkZW50ID09ICJIQjEzaHBmIl0sIGludC4zV1Qkd3Nubl9yZXMuNVtpbnQuM1dUJG9yaWcuaWRlbnQgPT0gIkhCMTNocGYiXSkpICU+JQogIHRpZHlyOjpwaXZvdF93aWRlcihuYW1lc19mcm9tID0gIlZhcjIiLCB2YWx1ZXNfZnJvbSA9ICJGcmVxIikgJT4lCiAgcmVuYW1lKCJDbHVzdGVyIiA9ICJWYXIxIikgJT4lCiAgbXV0YXRlKENsdXN0ZXIgPSBnc3ViKCIgIiwiIixDbHVzdGVyKSkgJT4lCiAgbXV0YXRlKGFjcm9zcyhldmVyeXRoaW5nKCksIGdzdWIsIHBhdHRlcm4gPSAiXjAkIiwgcmVwbGFjZW1lbnQgPSAiLiIpKSAlPiUKICBrYmwoY2FwdGlvbiA9ICJIQjEzaHBmIGNlbGwgY291bnQiKSAlPiUKICBrYWJsZV9jbGFzc2ljKGZ1bGxfd2lkdGggPSBGLCAic3RyaXBlZCIpCmBgYAoKYGBge3J9CmFzLmRhdGEuZnJhbWUodGFibGUoaW50LjNXVCRDbHVzdGVyc1tpbnQuM1dUJG9yaWcuaWRlbnQgPT0gIkhCMTZocGYiXSwgaW50LjNXVCR3c25uX3Jlcy41W2ludC4zV1Qkb3JpZy5pZGVudCA9PSAiSEIxNmhwZiJdKSkgJT4lCiAgdGlkeXI6OnBpdm90X3dpZGVyKG5hbWVzX2Zyb20gPSAiVmFyMiIsIHZhbHVlc19mcm9tID0gIkZyZXEiKSAlPiUKICByZW5hbWUoIkNsdXN0ZXIiID0gIlZhcjEiKSAlPiUKICBtdXRhdGUoQ2x1c3RlciA9IGdzdWIoIiAiLCIiLENsdXN0ZXIpKSAlPiUKICBtdXRhdGUoYWNyb3NzKGV2ZXJ5dGhpbmcoKSwgZ3N1YiwgcGF0dGVybiA9ICJeMCQiLCByZXBsYWNlbWVudCA9ICIuIikpICU+JQogIGtibChjYXB0aW9uID0gIkhCMTZocGYgY2VsbCBjb3VudCIpICU+JQogIGthYmxlX2NsYXNzaWMoZnVsbF93aWR0aCA9IEYsICJzdHJpcGVkIikKYGBgCgojIyBSZW1vdmUgRkIgYW5kIEZCJmV5ZSBjbHVzdGVycwoKUmF0aW9uYWw6IHRoZSBhbW91bnQgb2YgRkIgb3IgRkImZXllIHdhcyBkaXNzZWN0aW9uIHNwZWNpZmljIGFuZCBub3QgcG9zc2libGUgdG8gcHJlY2lzZWx5IGNvbnRyb2wuCgpBZnRlciBleGFtaW5pbmcgQ2VsbCBDb3VudCBPcmlnaW5hbCBDbHVzdGVycyBieSBSZXMgNSBjbHVzdGVycyB3aWxsIHJlbW92ZSBjbHVzdGVyczoKMTEsIDE4LCAyMiwgMjMsIDMyIGFuZCAzOAoKV2lsbCBrZWVwIDI5IC0tIHRoaXMgaGFzIGxvdHMgb2YgY2VsbHMgZnJvbSBhIHZhcmlldHkgb2YgY2x1c3RlcnMgYW5kIG1heSBiZSBpbnRlcmVzdGluZwpXaWxsIGtlZXAgNSAtLSB0aGlzIGlzIGluIHdpdGggTUIgY2x1c3RlcnMgYW5kIG1heSBoYXZlIGJlZW4gbWlzbGFiZWxlZCBwcmV2aW91c2x5LiAgCldpbGwgYWxzbyBrZWVwIDMwIHNpbmNlIHRoaXMgbW9yZSBjbG9zZWx5IGFzc29jaWF0ZWQgd2l0aCBNQiBjbHVzdGVycyB0aGFuIEZCIGNsdXN0ZXJzLgoKYGBge3IsIGZpZy53aWR0aD01LCBmaWcuaGVpZ2h0PTV9CklkZW50cyhpbnQuM1dUKSA8LSAid3Nubl9yZXMuNSIKaW50LjNXVC5zdWJzZXQgPC0gc3Vic2V0KGludC4zV1QsIGlkZW50cyA9IGMoIjExIiwiMTgiLCIyMiIsIjIzIiwiMzIiLCIzOCIpLCBpbnZlcnQgPSBUUlVFKQpEaW1QbG90KGludC4zV1Quc3Vic2V0LCByZWR1Y3Rpb24gPSAid25uLnVtYXAiLCBsYWJlbCA9IFQsIHJlcGVsID0gVCkgKyBzY2FsZV9jb2xvcl9pZ3YoKQpgYGAKCiMjIFJlcyA1IGNsdXN0ZXJpbmcgc3BsaXQgYnkgU2FtcGxlCmBgYHtyLCBmaWcud2lkdGg9MTAsIGZpZy5oZWlnaHQ9NX0KcDEgPC0gRGltUGxvdChpbnQuM1dULnN1YnNldCwgcmVkdWN0aW9uID0gIndubi51bWFwIiwgZ3JvdXAuYnkgPSAid3Nubl9yZXMuNSIsIHNwbGl0LmJ5ID0gIm9yaWcuaWRlbnQiLCBsYWJlbCA9IFQsIHJlcGVsID0gVCkgKyBzY2FsZV9jb2xvcl9pZ3YoKQpwMQpgYGAKCiMjIE9yaWdpbmFsIENsdXN0ZXIgbmFtZXMgc3BsaXQgYnkgU2FtcGxlCmBgYHtyLCBmaWcud2lkdGg9MTAsIGZpZy5oZWlnaHQ9NX0KRGltUGxvdChpbnQuM1dULnN1YnNldCwgcmVkdWN0aW9uID0gIndubi51bWFwIiwgZ3JvdXAuYnkgPSAiQ2x1c3RlcnMiLCBzcGxpdC5ieSA9ICJvcmlnLmlkZW50IiwgbGFiZWwgPSBULCByZXBlbCA9IFQsIG5jb2wgPSAzKSArIHNjYWxlX2NvbG9yX2lndigpICsgTm9MZWdlbmQoKQpgYGAKCmBgYHtyLCBmaWcuaGVpZ2h0PTEwLCBmaWcud2lkdGg9MTB9CklkZW50cyhpbnQuM1dULnN1YnNldCkgPC0gIkNsdXN0ZXJzIgpIQjFjZWxscyA8LSBXaGljaENlbGxzKGludC4zV1Quc3Vic2V0LCBpZGVudHMgPSAiSEIuMSIpCkhCMmNlbGxzIDwtIFdoaWNoQ2VsbHMoaW50LjNXVC5zdWJzZXQsIGlkZW50cyA9ICJIQi4yIikKSEIzY2VsbHMgPC0gV2hpY2hDZWxscyhpbnQuM1dULnN1YnNldCwgaWRlbnRzID0gIkhCLjMiKQpwMSA8LSBEaW1QbG90KGludC4zV1Quc3Vic2V0LCBncm91cC5ieSA9ICJ3c25uX3Jlcy41IiwgY2VsbHMuaGlnaGxpZ2h0ID0gSEIxY2VsbHMsIHJlZHVjdGlvbiA9ICJ3bm4udW1hcCIpICsgTm9MZWdlbmQoKSArIGdndGl0bGUoIkhCLjEgY2VsbHMiKQpwMiA8LSBEaW1QbG90KGludC4zV1Quc3Vic2V0LCBncm91cC5ieSA9ICJ3c25uX3Jlcy41IiwgY2VsbHMuaGlnaGxpZ2h0ID0gSEIyY2VsbHMsIHJlZHVjdGlvbiA9ICJ3bm4udW1hcCIpICsgTm9MZWdlbmQoKSArIGdndGl0bGUoIkhCLjIgY2VsbHMiKQpwMyA8LSBEaW1QbG90KGludC4zV1Quc3Vic2V0LCBncm91cC5ieSA9ICJ3c25uX3Jlcy41IiwgY2VsbHMuaGlnaGxpZ2h0ID0gSEIzY2VsbHMsIHJlZHVjdGlvbiA9ICJ3bm4udW1hcCIpICsgTm9MZWdlbmQoKSArIGdndGl0bGUoIkhCLjMgY2VsbHMiKQpwNCA8LSBEaW1QbG90KGludC4zV1Quc3Vic2V0LCBncm91cC5ieSA9ICJ3c25uX3Jlcy41IiwgcmVkdWN0aW9uID0gIndubi51bWFwIiwgbGFiZWwgPSBUUlVFLCByZXBlbCA9IFQpICsgTm9MZWdlbmQoKSArIHNjYWxlX2NvbG9yX2lndigpCihwMSArIHAyKSAvIChwMyArIHA0KQpgYGAKU2luY2UgdGhlcmUgYXJlIHN0aWxsIGEgZmV3IGNlbGxzIHdoaWNoIHdlcmUgb3JpZ2luYWxseSBjYWxsZWQgRkIgb3IgRkImZXllIGluIG90aGVyIGNsdXN0ZXJzLCB0aGVzZSBsYWJlbHMgYXJlIHN0aWxsIGluIHRoZSBtZXRhZGF0YSB0YWJsZSBhbmQgYXJlIHN0aWxsIGNsdXR0ZXJpbmcgdXAgdGhlIFVNQVAuICBTbyB3aWxsIHJlbW92ZSBhbGwgbGFiZWxzIHdpdGggIkZCIiBpbiB0aGVtIGZyb20gVU1BUCBvZiBjbHVzdGVyIGxhYmVscy4KCmBgYHtyfQppbnQuM1dULnN1YnNldCRmaXhlZENsdXN0ZXJzIDwtIGludC4zV1Quc3Vic2V0JENsdXN0ZXJzCmludC4zV1Quc3Vic2V0JGZpeGVkQ2x1c3RlcnNbZ3JlcCgiRkIiLCBpbnQuM1dULnN1YnNldCRmaXhlZENsdXN0ZXJzKV0gPC0gIiAiCmBgYAoKYGBge3IsIGZpZy5oZWlnaHQ9MTAsIGZpZy53aWR0aD0xMH0KcDEgPC0gRGltUGxvdChpbnQuM1dULnN1YnNldCwgZ3JvdXAuYnkgPSAiZml4ZWRDbHVzdGVycyIsIGNlbGxzLmhpZ2hsaWdodCA9IEhCMWNlbGxzLCByZWR1Y3Rpb24gPSAid25uLnVtYXAiKSArIE5vTGVnZW5kKCkgKyBnZ3RpdGxlKCJIQi4xIGNlbGxzIikKcDIgPC0gRGltUGxvdChpbnQuM1dULnN1YnNldCwgZ3JvdXAuYnkgPSAiZml4ZWRDbHVzdGVycyIsIGNlbGxzLmhpZ2hsaWdodCA9IEhCMmNlbGxzLCByZWR1Y3Rpb24gPSAid25uLnVtYXAiKSArIE5vTGVnZW5kKCkgKyBnZ3RpdGxlKCJIQi4yIGNlbGxzIikKcDMgPC0gRGltUGxvdChpbnQuM1dULnN1YnNldCwgZ3JvdXAuYnkgPSAiZml4ZWRDbHVzdGVycyIsIGNlbGxzLmhpZ2hsaWdodCA9IEhCM2NlbGxzLCByZWR1Y3Rpb24gPSAid25uLnVtYXAiKSArIE5vTGVnZW5kKCkgKyBnZ3RpdGxlKCJIQi4zIGNlbGxzIikKcDQgPC0gRGltUGxvdChpbnQuM1dULnN1YnNldCwgZ3JvdXAuYnkgPSAiZml4ZWRDbHVzdGVycyIsIHJlZHVjdGlvbiA9ICJ3bm4udW1hcCIsIGxhYmVsID0gVFJVRSwgcmVwZWwgPSBUKSArIE5vTGVnZW5kKCkgKyBzY2FsZV9jb2xvcl9pZ3YoKQoocDEgKyBwMikgLyAocDMgKyBwNCkKYGBgCgpgYGB7ciwgcmVzdWx0cz1GfQpJZGVudHMoaW50LjNXVC5zdWJzZXQpIDwtICJ3c25uX3Jlcy41IgpBbGwubWFya2VycyA8LSBGaW5kQWxsTWFya2VycyhpbnQuM1dULnN1YnNldCwgb25seS5wb3MgPSBUUlVFKQp3cml0ZS50YWJsZShBbGwubWFya2VycywgZmlsZSA9ICIuLi9yZXN1bHRzL2ludDNXVC5zdWJzZXQubWFya2Vycy5yZXMuNS50eHQiLCBzZXAgPSAiXHQiLCBxdW90ZSA9IEYsIGNvbC5uYW1lcyA9IE5BKQpgYGAKCmBgYHtyfQpjZWxsQ291bnQgPC0gYXMuZGF0YS5mcmFtZSh0YWJsZShpbnQuM1dULnN1YnNldCRDbHVzdGVycywgaW50LjNXVC5zdWJzZXQkd3Nubl9yZXMuNSwgaW50LjNXVC5zdWJzZXQkb3JpZy5pZGVudCkpICU+JQogIGRwbHlyOjpmaWx0ZXIoIUZyZXEgPT0gMCkKd3JpdGUudGFibGUoY2VsbENvdW50LCBmaWxlID0gIi4uL3Jlc3VsdHMvaW50M1dULmNlbGxDb3VudC5yZXMuNS50eHQiLCBxdW90ZSA9IEYsIHNlcCA9ICJcdCIsIHJvdy5uYW1lcyA9IEZBTFNFKQpgYGAKCkFmdGVyIGRldGVybWluaW5nIGNsdXN0ZXIgY2VsbCB0eXBlcywgYWRkaW5nIGFzICJpbnRDbHVzdGVycyIKCmBgYHtyfQpEaW1QbG90KGludC4zV1Quc3Vic2V0LCBncm91cC5ieSA9ICJ3c25uX3Jlcy41IiwgcmVkdWN0aW9uID0gIndubi51bWFwIiwgbGFiZWwgPSBUUlVFLCByZXBlbCA9IFQpICsgTm9MZWdlbmQoKSArIHNjYWxlX2NvbG9yX2lndigpCmBgYAoKYGBge3J9CklkZW50cyhpbnQuM1dULnN1YnNldCkgPC0gIndzbm5fcmVzLjUiCmludC4zV1Quc3Vic2V0IDwtIFJlbmFtZUlkZW50cyhpbnQuM1dULnN1YnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIwIiA9ICJDYXVkSEIuMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgPSAiU0MuMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgPSAicjMuMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMyIgPSAiQ2F1ZEhCLjIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjQiID0gIk1CLjEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjUiID0gIk1IQi4xIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI2IiA9ICJNSEIuMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNyIgPSAiTmV1cm9uLjEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjgiID0gIkNhdWRIQi4zIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI5IiA9ICJNSEIuMyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTAiID0gIlNDLjIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEyIiA9ICJyMSZyMi4xIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxMyIgPSAicjQuMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTQiID0gIk1CLjIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjE1IiA9ICJyMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTYiID0gInIyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxNyIgPSAicjUuMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTkiID0gIlNDLjMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwIiA9ICJyNC4yIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMSIgPSAicjUuMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjQiID0gIlNDLjQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjI1IiA9ICJNSEIuNCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjYiID0gIk1IQi41IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyNyIgPSAicjYuMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjgiID0gIkNpbGlhdGVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyOSIgPSAiTmV1cm9nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIzMCIgPSAiTUIuMyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMzEiID0gInI2LjIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjMzIiA9ICJyMSZyMi4yIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIzNCIgPSAiQ2F1ZEhCLjQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjM1IiA9ICJOZXVyb24uMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMzYiID0gIk5DLjEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjM3IiA9ICJIQiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMzkiID0gIk5DLjIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjQwIiA9ICJNSEIuNiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNDEiID0gIk1pdG9jaG9uZHJpYWwiKQppbnQuM1dULnN1YnNldCRpbnRDbHVzdGVycyA8LSBJZGVudHMoaW50LjNXVC5zdWJzZXQpCmBgYAoKYGBge3J9CkRpbVBsb3QoaW50LjNXVC5zdWJzZXQsIHJlZHVjdGlvbiA9ICJ3bm4udW1hcCIsIGxhYmVsID0gVFJVRSwgcmVwZWwgPSBUKSArIE5vTGVnZW5kKCkgKyBzY2FsZV9jb2xvcl9pZ3YoKSArIGdndGl0bGUoIkludGVncmF0ZWQgTmV1cmFsIENsdXN0ZXJzIikKYGBgCgpgYGB7cn0Kc2F2ZVJEUyhpbnQuM1dULnN1YnNldCwgZmlsZSA9ICJSRFNmaWxlcy9pbnQubmV1cmFsLjNXVC5zdWJzZXQuUkRTIikKYGBgCgpgYGB7cn0Kc2Vzc2lvbkluZm8oKQpgYGAKCg==